#region (c) 2014 THN Solutions LLC. - All rights reserved
/*
THN DATA ABSTRACTION LAYER version 1

Copyright (c) 2014, THN Solutions LLC. ( www.ThnSolutions.com )
Author: Nguyễn, M. Hải                 ( www.Minh-Hai.com     )
All rights reserved.

This library is dual-licensed.
  + For commercial software, please obtain a commercial license from THN Solutions LLC.

  + For free software, this library is licensed under GPL version 3. A summary of GPLv3 is
    listed below. You should also find a copy of GPLv3 as file License_GPLv3.txt included
	with the source-code files.

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License version 3 as published by
    the Free Software Foundation  of the License.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
#endregion

#region Using directives
using System;
#endregion

namespace Thn.Data.Database.Sql.Dialect
{
    /// <summary>
    /// Provides string constants for Sql dialects
    /// </summary>
    public class SqlDialectStrings
    {
        /// <summary>
        /// Begin of an item name
        /// </summary>
        public string ItemStart = "[";
        /// <summary>
        /// End of an item name
        /// </summary>
        public string ItemEnd = "]";

        /// <summary>
        /// Start of group
        /// </summary>
        public string GroupStart = "(";
        /// <summary>
        /// End of group
        /// </summary>
        public string GroupEnd = ")";

        /// <summary>
        /// Separator between items in a group
        /// </summary>
        public string ItemSeparator = ", ";
        /// <summary>
        /// Break between each query command
        /// </summary>
        public string CommandEnd = ";";
        /// <summary>
        /// Signal to execute command
        /// </summary>
        public string Execute = "GO";
        /// <summary>
        /// Start of a parameter "@"
        /// </summary>
        public string ParameterStart = "@";
        /// <summary>
        /// Placeholder for a parameter "?"
        /// </summary>
        public string ParameterHolder = "?";
        /// <summary>
        /// Specifies an item is always required
        /// </summary>
        public string Required = " not null";

        /// <summary>
        /// Create table clause
        /// </summary>
        public string CreateTable = "CREATE TABLE ";
        /// <summary>
        /// Drop table clause
        /// </summary>
        public string DeleteTable = "DROP TABLE ";
        /// <summary>
        /// Insert record into table clause
        /// </summary>
        public string InsertRecord = "INSERT INTO ";
        /// <summary>
        /// Update record into table clause
        /// </summary>
        public string UpdateRecord = "UPDATE ";
        /// <summary>
        /// Set clause in Update record (UPDATE [Table] SET ....)
        /// </summary>
        public string SetValue = " SET ";
        /// <summary>
        /// Delete record from table clause
        /// </summary>
        public string DeleteRecord = "DELETE FROM ";
        /// <summary>
        /// Select record clause
        /// </summary>
        public string SelectRecord = "SELECT ";
        /// <summary>
        /// From clause in Select record (SELECT [column] FROM [entity])
        /// </summary>
        public string FromTable = " FROM ";
        /// <summary>
        /// Condition clause
        /// </summary>
        public string Condition = " WHERE ";
        /// <summary>
        /// Values keyword
        /// </summary>
        public string Values = " VALUES ";
        /// <summary>
        /// Primary key clause " PRIMARY KEY "
        /// </summary>
        public string PrimaryKey = " PRIMARY KEY ";
        /// <summary>
        /// " DISTINCT "
        /// </summary>
        public string Distinct = " DISTINCT ";
        /// <summary>
        /// " desc "
        /// </summary>
        public string Descending = " desc ";
        /// <summary>
        /// " asc "
        /// </summary>
        public string Ascending = " asc ";

        /// <summary>
        /// "ORDER BY "
        /// </summary>
        public string OrderBy = " ORDER BY ";

        /// <summary>
        /// Equal condition
        /// </summary>
        public string Equal = " = ";
        /// <summary>
        /// Greater condition
        /// </summary>
        public string Greater = " > ";
        /// <summary>
        /// Greater or Equal condition
        /// </summary>
        public string GreaterOrEqual = " >= ";
        /// <summary>
        /// Less condition
        /// </summary>
        public string Less = " < ";
        /// <summary>
        /// Less or Equal condition
        /// </summary>
        public string LessOrEqual = " <= ";
        /// <summary>
        /// Not Equal condition
        /// </summary>
        public string NotEqual = " <> ";
        /// <summary>
        /// AND condition
        /// </summary>
        public string And = " AND ";
        /// <summary>
        /// OR condition
        /// </summary>
        public string Or = " OR ";
        /// <summary>
        /// NOT condition
        /// </summary>
        public string Not = " NOT ";

        /// <summary>
        /// Siginifies a column is identifier and its value is auto-generated by the underlying database engine
        /// <para>" Identity "</para>
        /// </summary>
        public string Identity = " Identity ";
    }
}
